package com.tanhua.commons.template;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.tanhua.commons.properties.OssProperties;

import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @author liuyp
 * @date 2021/01/26
 */
public class OssTemplate {

    private OssProperties properties;

    public OssTemplate(OssProperties properties) {
        this.properties = properties;
    }

    /**
     * 上传文件到阿里云OSS
     * @param filename 文件名称，比如：abc.jpg
     * @param is 文件输入流
     * @return 文件的访问路径
     */
    public String upload(String filename, InputStream is) {
        // Endpoint以杭州为例，其它Region请按实际情况填写。
        String endpoint = properties.getEndpoint();
        // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = properties.getAccessKey();
        String accessKeySecret = properties.getSecret();

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 设置文件存储路径和文件名。路径要分多级文件夹，文件名称不能重复。
        String dirPath = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
        String suffix = filename.substring(filename.lastIndexOf("."));
        // 2021/01/26/xxx.jpg
        filename = dirPath + "/" + UUID.randomUUID().toString() + suffix;

        // 上传网络流。
        ossClient.putObject(properties.getBucketName(), filename, is);

        // 关闭OSSClient。
        ossClient.shutdown();

        return properties.getUrl() + filename;
    }
}
